const {app, BrowserWindow, screen, ipcMain, dialog, globalShortcut, Tray, Menu} = require('electron/main');
const AutoLaunch = require('auto-launch');
const path = require("path");
const {readSystemInfo} = require("./compoents/ReadSystemInfo");
const {checkUpdate} = require("./compoents/checkUpdate");

let mainWindow;
let isWindowVisible = true; // 用于跟踪窗口的可见性
let tray; // 托盘图标变量

const appAutoLauncher = new AutoLaunch({
    name: 'YourAppName'
});

// 检查是否已经有实例在运行
if (!app.requestSingleInstanceLock()) {
    app.quit(); // 终止后续实例
}

// 创建主窗口
const createWindow = async () => {
    try {
        const date = await readSystemInfo();

        const {width, height, x, y} = screen.getPrimaryDisplay().bounds;

        mainWindow = new BrowserWindow({
            width: 930,
            height: 640,
            minWidth: 930,
            minHeight: 640,
            x: x + (width - 930) / 2,
            y: y + (height - 640) / 2,
            autoHideMenuBar: true,
            icon: path.join(__dirname, '../ico/logo.jpg'), // 设置窗口图标
            webPreferences: {
                nodeIntegration: true,
                contextIsolation: false,
                enableRemoteModule: false,
            },
            show: true
        });

        await mainWindow.loadFile('./renderer/views/index.html');

        mainWindow.on('close', (event) => {
            event.preventDefault(); // 阻止默认关闭行为
            mainWindow.hide()
        });

        ipcMain.on('SendDate', (event) => {
            event.reply('SendDate', date, true);
        });

        // 启动后刷新一下窗口
        mainWindow.reload()

        // 隐藏窗口
        mainWindow.hide()

        // 每1小时刷新一次页面
        setInterval(() => mainWindow.reload(), 3600000); // 3600000ms

    } catch (error) {
        console.error("程序出现错误:", error);
        app.quit();
    }
};

// 创建托盘图标
const createTray = () => {
    tray = new Tray(path.join(__dirname, '../ico/logo.jpg')); // 设置托盘图标
    tray.setToolTip('计算机硬件信息收集客户端 v1.0.0'); // 设置托盘提示文字

    const contextMenu = Menu.buildFromTemplate([
        {
            label: '打开',
            click: () => {
                mainWindow.show(); // 显示窗口
                isWindowVisible = true; // 更新窗口可见性状态
            }
        },
        {
            label: '退出(请尽量不要关闭软件，除非必要。谢谢！)',
            click: () => {
                mainWindow.destroy(); // 退出应用
            }
        }
    ]);

    tray.setContextMenu(contextMenu); // 设置托盘菜单

    tray.on('double-click', () => {
        mainWindow.show(); // 双击托盘图标显示窗口
        isWindowVisible = true; // 更新窗口可见性状态
    });
};

// 应用准备就绪时
app.whenReady().then(async () => {
    // 调用检查更新函数
    await checkUpdate();

    // 启动主窗口
    await createWindow();

    // 创建托盘图标
    await createTray();

    // 注册快捷键
    globalShortcut.register('Control+Alt+Shift+F12', () => {
        isWindowVisible ? mainWindow.hide() : mainWindow.show();
        isWindowVisible = !isWindowVisible;
    });

    appAutoLauncher.isEnabled()
        .then((isEnabled) => {
            if (!isEnabled) {
                return appAutoLauncher.enable();
            }
        }).catch(err => console.error('设置自启失败:', err));

    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) {
            createWindow(); // 创建新窗口
        } else {
            mainWindow.show(); // 显示已有窗口
            isWindowVisible = true; // 更新窗口可见性状态
        }
    });
});

// 处理所有窗口关闭事件
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

// 处理第二个实例的打开事件
app.on('second-instance', (event, commandLine, workingDirectory) => {
    if (mainWindow) {
        if (mainWindow.isMinimized()) mainWindow.restore(); // 还原窗口
        mainWindow.focus(); // 聚焦窗口
        mainWindow.show(); // 显示窗口
        isWindowVisible = true; // 更新窗口可见性状态
    }
});